#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project ：Btcbf
@File ：btc破解.py
@IDE  ：PyCharm
@Author ：李涵彬
@Date ：2025/3/15 下午4:33
"""

import random
import os
from bit import Key
import time
from bit.format import bytes_to_wif

# 地址维护文件
fileBTC = "btcaddr.txt"


# 读取并验证文件中的地址
def seek():
    if not os.path.exists(fileBTC):
        print(f"{fileBTC} 文件不存在，请确保文件路径正确且文件存在。")
        return None
    with open(fileBTC, "r") as f:
        add = f.read().split()
        addbtc = set(add)
    return addbtc


# 随机生成 BTC 私钥（WIF 格式）
def mHash():
    # 生成 32 字节随机数据作为私钥
    private_key_bytes = os.urandom(32)
    # 转换为 WIF 格式
    private_key_wif = bytes_to_wif(private_key_bytes, compressed=True)
    return private_key_wif


# 主碰撞函数
def main():
    print("BTC 私钥助记词地址碰撞器启动...")
    addbtc = seek()
    if addbtc is None:
        return
    print(f"已加载 {len(addbtc)} 个目标地址，开始碰撞...")
    w = 0  # 匹配成功次数
    z = 0  # 总尝试次数
    start_time = time.time()
    while True:
        z += 1
        # 随机生成私钥
        PRIVATE_KEY = mHash()
        # 使用 bit 库生成地址
        try:
            key = Key(PRIVATE_KEY)
            btcadd = key.address  # P2PKH 地址
        except Exception as e:
            print(f"错误: {e}")
            continue
        # 匹配地址
        if btcadd in addbtc:
            w += 1
            # 输出匹配结果
            print(f"\n匹配成功！第 {z} 次尝试")
            print(f"私钥: {PRIVATE_KEY}")
            print(f"地址: {btcadd}")
            # 保存结果到文件
            with open("result.txt", "a") as f:
                f.write(f"\nBTC PRIVATEKEY ======> {PRIVATE_KEY}")
                f.write(f"\nAddressBTC =========> {btcadd}")
            # 可选择在此处退出或继续寻找更多匹配
            # break
        # 定期输出进度
        if z % 1000 == 0:
            elapsed_time = time.time() - start_time
            print(f"已尝试 {z} 次，耗时 {elapsed_time:.2f} 秒，匹配成功 {w} 次")


if __name__ == "__main__":
    main()